/*
 * Copyright (c) 2025 Huawei Device, Inc. Ltd. and <马弓手>.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "SpinnerDialog.h"
REGISTER_PLUGIN_CLASS(SpinnerDialog)

bool SpinnerDialog::execute(const string&  action, cJSON* args, CallbackContext cbc)
{
    if(action == "show") {
        m_cbc = cbc;
        string strTitle = "";
        string strMessage = "";
        bool isFixed = false;
        if(cJSON_GetArraySize(args) > 0) {
            if(cJSON_GetArrayItem(args, 0)->type == cJSON_String) {
                strTitle = cJSON_GetArrayItem(args, 0)->valuestring;
            }
        }
        
        if(cJSON_GetArraySize(args) > 1) {
            if(cJSON_GetArrayItem(args, 1)->type == cJSON_String) {
                strMessage = cJSON_GetArrayItem(args, 1)->valuestring;
            }
        }
        
        if(cJSON_GetArraySize(args) > 2) {
            if(cJSON_GetArrayItem(args, 2)->type == cJSON_True) {
                isFixed = true;
            }
        }
        
       cJSON* pJson =  cJSON_CreateObject();
       cJSON_AddStringToObject(pJson, "title", strTitle.c_str());
       cJSON_AddStringToObject(pJson, "message", strMessage.c_str()); 
       if(isFixed) {
            cJSON_AddTrueToObject(pJson, "isFixed");
       } else {
            cJSON_AddFalseToObject(pJson, "isFixed");
       }
       char* pArg = cJSON_Print(pJson);
       executeArkTs("/pages/SpinnerDialog", 1, pArg, "SpinnerDialog", cbc);
    }
    
    if(action == "hide") {
        executeArkTs("/pages/SpinnerDialog", 0, "", "SpinnerDialog", cbc);
    }
    if(action == "onArKTsResult") {
        return onArKTsResult(args);
    }
    return true;
}

bool SpinnerDialog::onArKTsResult(cJSON* args)
{
    m_cbc.success();
    return true;
}